//    |  /           |
//    ' /   __| _` | __|  _ \   __|
//    . \  |   (   | |   (   |\__ `
//   _|\_\_|  \__,_|\__|\___/ ____/
//                   Multi-Physics
//
//  License:		 BSD License
//					 Kratos default license: kratos/license.txt
//
//  Main authors:    Miguel Maso Sotomayor
//

#include "pfem_2_application_variables.h"

namespace Kratos
{

 	KRATOS_CREATE_VARIABLE(double, PRESS_GRADIENT_JUMP)
	KRATOS_CREATE_VARIABLE(double, PRESS_DISCONTINUITY);
	KRATOS_CREATE_VARIABLE(double, INV_LAPLACIAN_ENRICH)
	KRATOS_CREATE_VARIABLE(double, ENRICH_RHS)
	KRATOS_CREATE_VARIABLE(double, G_VALUE)
	KRATOS_CREATE_VARIABLE(double, GRADIENT_DISCONTINUITY)
	KRATOS_CREATE_VARIABLE(double, PREVIOUS_ITERATION_PRESSURE)
	KRATOS_CREATE_VARIABLE(double, FIRST_ITERATION_PRESSURE)
	KRATOS_CREATE_VARIABLE(double, VELOCITY_OVER_ELEM_SIZE)
	KRATOS_CREATE_VARIABLE(double, MEAN_SIZE)
	KRATOS_CREATE_VARIABLE(double, MEAN_VELOCITY_DIFFERENCE)
	KRATOS_CREATE_VARIABLE(double, SPECIFIC_HEAT_CAPACITY_WATER)
	KRATOS_CREATE_VARIABLE(double, SPECIFIC_HEAT_CAPACITY_AIR)
	KRATOS_CREATE_VARIABLE(double, DELTA_TEMPERATURE)
	KRATOS_CREATE_VARIABLE(double, AVAILABLE_AIR_VOLUME)
	KRATOS_CREATE_VARIABLE(double, AVAILABLE_UNBURNED_AIR_VOLUME)
	KRATOS_CREATE_VARIABLE(double, OXYGEN_FRACTION)
	KRATOS_CREATE_VARIABLE(double, CORRECTED_DISTANCE)
	KRATOS_CREATE_VARIABLE(double, SOLID_PRESSURE)
	KRATOS_CREATE_VARIABLE(double, SOLID_YP)
	KRATOS_CREATE_VARIABLE(double, WATER_DISTANCE)
	KRATOS_CREATE_VARIABLE(double, ELASTIC_PRESSURE)
	KRATOS_CREATE_VARIABLE(double, WATER_VOLUME)
	KRATOS_CREATE_VARIABLE(double, VOLUME_CORRECTION)
	KRATOS_CREATE_VARIABLE(double, INLET_VELOCITY)

	KRATOS_CREATE_VARIABLE(bool, USEFUL_ELEMENT_FOR_COMBUSTION)

	KRATOS_CREATE_VARIABLE(Vector, ENRICH_LHS_ROW_3D)
	KRATOS_CREATE_VARIABLE(Vector, WATER_GAUSS_POINT)
    KRATOS_CREATE_VARIABLE(Vector, ELEMENT_MEAN_STRESS)

	//typedef PointerVector< PFEM_Particle, PFEM_Particle*, std::vector<PFEM_Particle*> > ParticlePointerVector;
	KRATOS_CREATE_VARIABLE( ParticlePointerVector , PARTICLE_POINTERS)

	//typedef PointerVector< PFEM_Particle_Fluid, PFEM_Particle_Fluid*, std::vector<PFEM_Particle_Fluid*> > FluidParticlePointerVector;
	KRATOS_CREATE_VARIABLE( FluidParticlePointerVector , FLUID_PARTICLE_POINTERS)

	KRATOS_CREATE_VARIABLE(int, NUMBER_OF_PARTICLES)
	KRATOS_CREATE_VARIABLE(int, NUMBER_OF_PARTICLES_AUX)
	KRATOS_CREATE_VARIABLE(int, NUMBER_OF_WATER_PARTICLES)
	KRATOS_CREATE_VARIABLE(int, NUMBER_OF_FLUID_PARTICLES)
	KRATOS_CREATE_VARIABLE(int, PARTICLE_POINTERS_OFFSET)
	KRATOS_CREATE_VARIABLE(int, WATER_PARTICLE_POINTERS_OFFSET)
	KRATOS_CREATE_VARIABLE(int, USE_PRESS_PROJ)

	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(ENRICH_LHS_ROW)
	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(ENRICH_PRESS_PROJ_NEGATIVE)
	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(ENRICH_PRESS_PROJ_POSITIVE)
	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(SURFACE_NORMAL)
	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(SURFACE_COORDINATES)
	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(PRESS_PROJ_NO_RO)
	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(DELTA_VELOCITY)
	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(WATER_VELOCITY)
	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(WATER_MESH_VELOCITY)
	KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(PROJECTED_VELOCITY)

} // namespace Kratos
